#ifndef _GLOWERBOUND_H_
#define _GLOWERBOUND_H_

#include "gsupplyLinkSolution.h"

class GLowerBound {
 protected :
  GSupplyLinkProblem* problem ;
  int np ;
  int jobEnd ;
  double lastDueDate ;

 public:
  GLowerBound (GSupplyLinkProblem* pb) ;
  double evaluateBinPackingL1(int jobStart) ;

  bool    checkConstraints(GSupplyLinkSolution& sol, int jobStart) ;
  virtual double evaluatePartial(GSupplyLinkSolution& sol, int jobStart) ;

  virtual double evaluate(GSupplyLinkSolution& sol, int jobStart)=0 ;
} ;

class GLowerBoundV0 : public GLowerBound {
 public:
  GLowerBoundV0 (GSupplyLinkProblem* pb):GLowerBound(pb){}
  virtual double evaluate(GSupplyLinkSolution& sol, int jobStart) ;
} ;


class GLowerBoundV1 : public GLowerBound {
 public:
  GLowerBoundV1 (GSupplyLinkProblem* pb):GLowerBound(pb){}
  virtual double evaluate(GSupplyLinkSolution& sol, int jobStart) ;
} ;


#endif
